/*
 * Copyright 2011 Drew Wilder-Goodwin
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

#ifndef DXDIAGCOM_H
#define DXDIAGCOM_H

#include "resources.h"
#include <dxdiag.h>
#include <wchar.h>

typedef struct {
    WCHAR *szPath;
    WCHAR *szName;
    WCHAR *szVersion;
    WCHAR *szLanguageEnglish;
    WCHAR *szLanguageLocalized;
    WCHAR *dwFileTimeLow;
    WCHAR *dwFileTimeHigh;
    WCHAR *szDatestampEnglish;
    WCHAR *szDatestampLocalized;
    WCHAR *szAttributes;
    WCHAR *lNumBytes;
    WCHAR *bExists;
    WCHAR *bBeta;
    WCHAR *bDebug;
    WCHAR *bObsolete;
    WCHAR *bProblem;
} DxDiag_Driver;

typedef struct {
    WCHAR *dwOSMajorVersion;
    WCHAR *dwOSMinorVersion;
    WCHAR *dwOSBuildNumber;
    WCHAR *dwOSPlatformID;
    WCHAR *dwDirectXVersionMajor;
    WCHAR *dwDirectXVersionMinor;
    WCHAR *szDirectXVersionLetter;
    WCHAR *bDebug;
    WCHAR *bNECPC98;
    WCHAR *ullPhysicalMemory;
    WCHAR *ullPhysicalMemoryOS;
    WCHAR *ullUsedPageFile;
    WCHAR *ullAvailPageFile;
    WCHAR *bNetMeetingRunning;
    WCHAR *bIsD3D8DebugRuntimeAvailable;
    WCHAR *bIsD3DDebugRuntime;
    WCHAR *bIsDInput8DebugRuntimeAvailable;
    WCHAR *bIsDInput8DebugRuntime;
    WCHAR *bIsDMusicDebugRuntimeAvailable;
    WCHAR *bIsDMusicDebugRuntime;
    WCHAR *bIsDDrawDebugRuntime;
    WCHAR *bIsDPlayDebugRuntime;
    WCHAR *bIsDSoundDebugRuntime;
    WCHAR *nD3DDebugLevel;
    WCHAR *nDDrawDebugLevel;
    WCHAR *nDIDebugLevel;
    WCHAR *nDMusicDebugLevel;
    WCHAR *nDPlayDebugLevel;
    WCHAR *nDSoundDebugLevel;
    WCHAR *nDShowDebugLevel;
    WCHAR *szWindowsDir;
    WCHAR *szBuildLab;
    WCHAR *szDxDiagVersion;
    WCHAR *szSetupParamEnglish;
    WCHAR *szProcessorEnglish;
    WCHAR *szSystemManufacturerEnglish;
    WCHAR *szSystemModelEnglish;
    WCHAR *szBIOSEnglish;
    WCHAR *szPhysicalMemoryEnglish;
    WCHAR *szPhysicalMemoryEnglishOS;
    WCHAR *szCSDVersion;
    WCHAR *szUserDPI;
    WCHAR *szSystemDPI;
    WCHAR *szDWMScalingDPI;
    WCHAR *szDirectXVersionEnglish;
    WCHAR *szDirectXVersionLongEnglish;
    WCHAR *szMachineNameLocalized;
    WCHAR *szOSLocalized;
    WCHAR *szOSExLocalized;
    WCHAR *szOSExLongLocalized;
    WCHAR *szLanguagesLocalized;
    WCHAR *szPageFileLocalized;
    WCHAR *szTimeLocalized;
    WCHAR *szMachineNameEnglish;
    WCHAR *szOSEnglish;
    WCHAR *szOSExEnglish;
    WCHAR *szOSExLongEnglish;
    WCHAR *szLanguagesEnglish;
    WCHAR *szPageFileEnglish;
    WCHAR *szTimeEnglish;
    WCHAR *ExtendedCPUFunctionBitmasks_0x80000009_bits0_31;
    WCHAR *ExtendedCPUFunctionBitmasks_0x80000009_bits32_63;
    WCHAR *ExtendedCPUFunctionBitmasks_0x80000009_bits64_95;
    WCHAR *ExtendedCPUFunctionBitmasks_0x80000009_bits96_127;
    WCHAR *ExtendedCPUFunctionBitmasks_0x8000000a_bits0_31;
    WCHAR *ExtendedCPUFunctionBitmasks_0x8000000a_bits32_63;
    WCHAR *ExtendedCPUFunctionBitmasks_0x8000000a_bits64_95;
    WCHAR *ExtendedCPUFunctionBitmasks_0x8000000a_bits96_127;
    WCHAR *ExtendedCPUFunctionBitmasks_0x8000000b_bits0_31;
    WCHAR *ExtendedCPUFunctionBitmasks_0x8000000b_bits32_63;
    WCHAR *ExtendedCPUFunctionBitmasks_0x8000000b_bits64_95;
    WCHAR *ExtendedCPUFunctionBitmasks_0x8000000b_bits96_127;
    WCHAR *ExtendedCPUFunctionBitmasks_0x8000000c_bits0_31;
    WCHAR *ExtendedCPUFunctionBitmasks_0x8000000c_bits32_63;
    WCHAR *ExtendedCPUFunctionBitmasks_0x8000000c_bits64_95;
    WCHAR *ExtendedCPUFunctionBitmasks_0x8000000c_bits96_127;
    WCHAR *ExtendedCPUFunctionBitmasks_0x8000000d_bits0_31;
    WCHAR *ExtendedCPUFunctionBitmasks_0x8000000d_bits32_63;
    WCHAR *ExtendedCPUFunctionBitmasks_0x8000000d_bits64_95;
    WCHAR *ExtendedCPUFunctionBitmasks_0x8000000d_bits96_127;
    WCHAR *ExtendedCPUFunctionBitmasks_0x8000000e_bits0_31;
    WCHAR *ExtendedCPUFunctionBitmasks_0x8000000e_bits32_63;
    WCHAR *ExtendedCPUFunctionBitmasks_0x8000000e_bits64_95;
    WCHAR *ExtendedCPUFunctionBitmasks_0x8000000e_bits96_127;
    WCHAR *ExtendedCPUFunctionBitmasks_0x8000000f_bits0_31;
    WCHAR *ExtendedCPUFunctionBitmasks_0x8000000f_bits32_63;
    WCHAR *ExtendedCPUFunctionBitmasks_0x8000000f_bits64_95;
    WCHAR *ExtendedCPUFunctionBitmasks_0x8000000f_bits96_127;
    WCHAR *ExtendedCPUFunctionBitmasks_0x80000010_bits0_31;
    WCHAR *ExtendedCPUFunctionBitmasks_0x80000010_bits32_63;
    WCHAR *ExtendedCPUFunctionBitmasks_0x80000010_bits64_95;
    WCHAR *ExtendedCPUFunctionBitmasks_0x80000010_bits96_127;
    WCHAR *ExtendedCPUFunctionBitmasks_0x80000011_bits0_31;
    WCHAR *ExtendedCPUFunctionBitmasks_0x80000011_bits32_63;
    WCHAR *ExtendedCPUFunctionBitmasks_0x80000011_bits64_95;
    WCHAR *ExtendedCPUFunctionBitmasks_0x80000011_bits96_127;
    WCHAR *ExtendedCPUFunctionBitmasks_0x80000012_bits0_31;
    WCHAR *ExtendedCPUFunctionBitmasks_0x80000012_bits32_63;
    WCHAR *ExtendedCPUFunctionBitmasks_0x80000012_bits64_95;
    WCHAR *ExtendedCPUFunctionBitmasks_0x80000012_bits96_127;
    WCHAR *ExtendedCPUFunctionBitmasks_0x80000013_bits0_31;
    WCHAR *ExtendedCPUFunctionBitmasks_0x80000013_bits32_63;
    WCHAR *ExtendedCPUFunctionBitmasks_0x80000013_bits64_95;
    WCHAR *ExtendedCPUFunctionBitmasks_0x80000013_bits96_127;
    WCHAR *ExtendedCPUFunctionBitmasks_0x80000014_bits0_31;
    WCHAR *ExtendedCPUFunctionBitmasks_0x80000014_bits32_63;
    WCHAR *ExtendedCPUFunctionBitmasks_0x80000014_bits64_95;
    WCHAR *ExtendedCPUFunctionBitmasks_0x80000014_bits96_127;
    WCHAR *ExtendedCPUFunctionBitmasks_0x80000015_bits0_31;
    WCHAR *ExtendedCPUFunctionBitmasks_0x80000015_bits32_63;
    WCHAR *ExtendedCPUFunctionBitmasks_0x80000015_bits64_95;
    WCHAR *ExtendedCPUFunctionBitmasks_0x80000015_bits96_127;
    WCHAR *ExtendedCPUFunctionBitmasks_0x80000016_bits0_31;
    WCHAR *ExtendedCPUFunctionBitmasks_0x80000016_bits32_63;
    WCHAR *ExtendedCPUFunctionBitmasks_0x80000016_bits64_95;
    WCHAR *ExtendedCPUFunctionBitmasks_0x80000016_bits96_127;
    WCHAR *ExtendedCPUFunctionBitmasks_0x80000017_bits0_31;
    WCHAR *ExtendedCPUFunctionBitmasks_0x80000017_bits32_63;
    WCHAR *ExtendedCPUFunctionBitmasks_0x80000017_bits64_95;
    WCHAR *ExtendedCPUFunctionBitmasks_0x80000017_bits96_127;
    WCHAR *ExtendedCPUFunctionBitmasks_0x80000018_bits0_31;
    WCHAR *ExtendedCPUFunctionBitmasks_0x80000018_bits32_63;
    WCHAR *ExtendedCPUFunctionBitmasks_0x80000018_bits64_95;
    WCHAR *ExtendedCPUFunctionBitmasks_0x80000018_bits96_127;
} DxDiag_SystemInfo;

typedef struct {
    WCHAR *szGuid;
    WCHAR *bSoftware;
    WCHAR *bKernelMode;
    WCHAR *bUsesDLS;
    WCHAR *bExternal;
    WCHAR *dwMaxAudioChannels;
    WCHAR *dwMaxChannelGroups;
    WCHAR *bDefaultPort;
    WCHAR *bOutputPort;
    WCHAR *szDescription;
} DxDiag_DirectMusicPort;

typedef struct {
    WCHAR *bDMusicInstalled;
    WCHAR *szGMFilePath;
    WCHAR *szGMFileVersion;
    WCHAR *bAccelerationEnabled;
    WCHAR *bAccelerationExists;
    WCHAR *szNotesLocalized;
    WCHAR *szNotesEnglish;
    WCHAR *szRegHelpText;
    WCHAR *szTestResultLocalized;
    WCHAR *szTestResultEnglish;
    DxDiag_DirectMusicPort **directMusicPorts;
    int numDirectMusicPorts;
} DxDiag_DirectMusic;

typedef struct DxDiag_DirectInputRelatedDevice_type {
    WCHAR *dwVendorID;
    WCHAR *dwProductID;
    WCHAR *szDescription;
    WCHAR *szLocation;
    WCHAR *szMatchingDeviceId;
    WCHAR *szUpperFilters;
    WCHAR *szService;
    WCHAR *szLowerFilters;
    WCHAR *szOEMData;
    WCHAR *szFlags1;
    WCHAR *szFlags2;
    DxDiag_Driver **drivers;
    int numDrivers;
    struct DxDiag_DirectInputRelatedDevice_type
    **directInputRelatedDevices;
    int numDirectInputRelatedDevices;
} DxDiag_DirectInputRelatedDevice;

typedef struct {
    WCHAR *szInstanceName;
    WCHAR *bAttached;
    WCHAR *dwJoystickID;
    WCHAR *dwVendorID;
    WCHAR *dwProductID;
    WCHAR *dwDevType;
    WCHAR *szFFDriverName;
    WCHAR *szFFDriverDateEnglish;
    WCHAR *szFFDriverVersion;
    WCHAR *lFFDriverSize;
} DxDiag_DirectInputDevice;

typedef struct {
    WCHAR *bPollFlags;
    WCHAR *szInputNotesLocalized;
    WCHAR *szInputNotesEnglish;
    WCHAR *szRegHelpText;
    DxDiag_DirectInputDevice **directInputDevices;
    int numDirectInputDevices;
    DxDiag_DirectInputRelatedDevice **directInputGamePorts;
    int numDirectInputGamePorts;
    DxDiag_DirectInputRelatedDevice **directInputUSBs;
    int numDirectInputUSBs;
    DxDiag_DirectInputRelatedDevice **directInputPs2Devices;
    int numDirectInputPs2Devices;
} DxDiag_DirectInput;

typedef struct {
    WCHAR *szAdapterName;
    WCHAR *szSPNameEnglish;
    WCHAR *szSPNameLocalized;
    WCHAR *szGuid;
    WCHAR *dwFlags;
} DxDiag_DirectPlayAdapter;

typedef struct {
    WCHAR *szNameLocalized;
    WCHAR *szNameEnglish;
    WCHAR *szGuid;
    WCHAR *szFile;
    WCHAR *szPath;
    WCHAR *szVersionLocalized;
    WCHAR *szVersionEnglish;
    WCHAR *bRegistryOK;
    WCHAR *bProblem;
    WCHAR *bFileMissing;
    WCHAR *bInstalled;
    WCHAR *dwDXVer;
} DxDiag_DirectPlaySp;

typedef struct {
    WCHAR *szNetworkNotesLocalized;
    WCHAR *szNetworkNotesEnglish;
    WCHAR *szRegHelpText;
    WCHAR *szTestResultLocalized;
    WCHAR *szTestResultEnglish;
    WCHAR *szVoiceWizardFullDuplexTestLocalized;
    WCHAR *szVoiceWizardHalfDuplexTestLocalized;
    WCHAR *szVoiceWizardMicTestLocalized;
    WCHAR *szVoiceWizardFullDuplexTestEnglish;
    WCHAR *szVoiceWizardHalfDuplexTestEnglish;
    WCHAR *szVoiceWizardMicTestEnglish;
    DxDiag_DirectPlaySp **directPlaySps;
    int numDirectPlaySps;
    DxDiag_DirectPlayAdapter **directPlayAdapters;
    int numDirectPlayAdapters;
} DxDiag_DirectPlay;

typedef struct {
    WCHAR *szName;
    WCHAR *szVersion;
    WCHAR *szLanguageEnglish;
    WCHAR *szLanguageLocalized;
    WCHAR *dwFileTimeLow;
    WCHAR *dwFileTimeHigh;
    WCHAR *szDatestampEnglish;
    WCHAR *szDatestampLocalized;
    WCHAR *szAttributes;
    WCHAR *lNumBytes;
    WCHAR *bExists;
    WCHAR *bBeta;
    WCHAR *bDebug;
    WCHAR *bObsolete;
    WCHAR *bProblem;
} DxDiag_DirectXFile;

typedef struct {
    WCHAR *szDXFileNotesLocalized;
    WCHAR *szDXFileNotesEnglish;
    DxDiag_DirectXFile **directXFiles;
    int numDirectXFiles;
} DxDiag_DirectXFiles;

typedef struct {
    WCHAR *szDriveLetter;
    WCHAR *szFreeSpace;
    WCHAR *szMaxSpace;
    WCHAR *szFileSystem;
    WCHAR *szModel;
    WCHAR *szPNPDeviceID;
    WCHAR *dwHardDriveIndex;
    DxDiag_Driver **drivers;
    int numDrivers;
} DxDiag_LogicalDisk;

typedef struct {
    WCHAR *szDescription;
    WCHAR *szDeviceID;
    DxDiag_Driver **drivers;
    int numDrivers;
} DxDiag_SystemDevice;

typedef struct {
    WCHAR *szName;
    WCHAR *szVersion;
    WCHAR *ClsidFilter;
    WCHAR *szFileName;
    WCHAR *szFileVersion;
    WCHAR *szCatName;
    WCHAR *ClsidCat;
    WCHAR *dwInputs;
    WCHAR *dwOutputs;
    WCHAR *dwMerit;
} DxDiag_DirectShowFilter;

typedef struct {
    WCHAR *szD3DInputFormat;
    WCHAR *szD3DOutputFormat;
    WCHAR *szGuid;
    WCHAR *szCaps;
    WCHAR *dwNumPreviousOutputFrames;
    WCHAR *dwNumForwardRefSamples;
    WCHAR *dwNumBackwardRefSamples;
} DxDiag_DXVADeinterlaceCap;

typedef struct {
    WCHAR *szDeviceName;
    WCHAR *szDescription;
    WCHAR *szKeyDeviceID;
    WCHAR *szKeyDeviceKey;
    WCHAR *szManufacturer;
    WCHAR *szChipType;
    WCHAR *szDACType;
    WCHAR *szRevision;
    WCHAR *szDisplayMemoryLocalized;
    WCHAR *szDisplayMemoryEnglish;
    WCHAR *szDisplayModeLocalized;
    WCHAR *szDisplayModeEnglish;
    WCHAR *szOverlayEnglish;
    WCHAR *szDXVAHDEnglish;
    WCHAR *dwWidth;
    WCHAR *dwHeight;
    WCHAR *dwBpp;
    WCHAR *dwRefreshRate;
    WCHAR *szMonitorName;
    WCHAR *szMonitorMaxRes;
    WCHAR *szDriverName;
    WCHAR *szDriverAssemblyVersion;
    WCHAR *szDriverVersion;
    WCHAR *szDriverAttributes;
    WCHAR *szDriverLanguageEnglish;
    WCHAR *szDriverLanguageLocalized;
    WCHAR *szDriverDateEnglish;
    WCHAR *szDriverDateLocalized;
    WCHAR *lDriverSize;
    WCHAR *szMiniVdd;
    WCHAR *szMiniVddDateLocalized;
    WCHAR *szMiniVddDateEnglish;
    WCHAR *lMiniVddSize;
    WCHAR *szVdd;
    WCHAR *szDriverModelEnglish;
    WCHAR *szDriverModelLocalized;
    WCHAR *szDriverNodeStrongName;
    WCHAR *szRankOfInstalledDriver;
    WCHAR *bCanRenderWindow;
    WCHAR *bDriverBeta;
    WCHAR *bDriverDebug;
    WCHAR *bDriverSigned;
    WCHAR *bDriverSignedValid;
    WCHAR *szDeviceIdentifier;
    WCHAR *szDriverSignDate;
    WCHAR *dwDDIVersion;
    WCHAR *szDDIVersionEnglish;
    WCHAR *szDDIVersionLocalized;
    WCHAR *iAdapter;
    WCHAR *szVendorId;
    WCHAR *szDeviceId;
    WCHAR *szSubSysId;
    WCHAR *szRevisionId;
    WCHAR *dwWHQLLevel;
    WCHAR *bNoHardware;
    WCHAR *bDDAccelerationEnabled;
    WCHAR *b3DAccelerationExists;
    WCHAR *b3DAccelerationEnabled;
    WCHAR *bAGPEnabled;
    WCHAR *bAGPExists;
    WCHAR *bAGPExistenceValid;
    WCHAR *szDXVAModes;
    WCHAR *szDDStatusLocalized;
    WCHAR *szDDStatusEnglish;
    WCHAR *szD3DStatusLocalized;
    WCHAR *szD3DStatusEnglish;
    WCHAR *szAGPStatusLocalized;
    WCHAR *szAGPStatusEnglish;
    WCHAR *szNotesLocalized;
    WCHAR *szNotesEnglish;
    WCHAR *szRegHelpText;
    WCHAR *szTestResultDDLocalized;
    WCHAR *szTestResultDDEnglish;
    WCHAR *szTestResultD3D7Localized;
    WCHAR *szTestResultD3D7English;
    WCHAR *szTestResultD3D8Localized;
    WCHAR *szTestResultD3D8English;
    WCHAR *szTestResultD3D9Localized;
    WCHAR *szTestResultD3D9English;
    DxDiag_DXVADeinterlaceCap **dxvaDeinterlaceCaps;
    int numDxvaDeinterlaceCaps;
} DxDiag_DisplayDevice;

typedef struct {
    WCHAR *szDescription;
    WCHAR *szGuidDeviceID;
    WCHAR *szDriverName;
    WCHAR *szDriverPath;
    WCHAR *szDriverVersion;
    WCHAR *szDriverLanguageEnglish;
    WCHAR *szDriverLanguageLocalized;
    WCHAR *szDriverAttributes;
    WCHAR *szDriverDateEnglish;
    WCHAR *szDriverDateLocalized;
    WCHAR *lNumBytes;
    WCHAR *bDriverBeta;
    WCHAR *bDriverDebug;
    WCHAR *bDefaultSoundRecording;
    WCHAR *bDefaultVoiceRecording;
    WCHAR *dwFlags;
    WCHAR *dwFormats;
} DxDiag_SoundCaptureDevice;

typedef struct {
    WCHAR *dwDevnode;
    WCHAR *szGuidDeviceID;
    WCHAR *szHardwareID;
    WCHAR *szRegKey;
    WCHAR *szManufacturerID;
    WCHAR *szProductID;
    WCHAR *szDescription;
    WCHAR *szDriverName;
    WCHAR *szDriverPath;
    WCHAR *szDriverVersion;
    WCHAR *szDriverLanguageEnglish;
    WCHAR *szDriverLanguageLocalized;
    WCHAR *szDriverAttributes;
    WCHAR *szDriverDateEnglish;
    WCHAR *szDriverDateLocalized;
    WCHAR *szOtherDrivers;
    WCHAR *szProvider;
    WCHAR *szType;
    WCHAR *lNumBytes;
    WCHAR *bDriverBeta;
    WCHAR *bDriverDebug;
    WCHAR *bDriverSigned;
    WCHAR *bDriverSignedValid;
    WCHAR *lAccelerationLevel;
    WCHAR *bAudioDisabled;
    WCHAR *bDefaultSoundPlayback;
    WCHAR *bDefaultVoicePlayback;
    WCHAR *bVoiceManager;
    WCHAR *bEAX20Listener;
    WCHAR *bEAX20Source;
    WCHAR *bI3DL2Listener;
    WCHAR *bI3DL2Source;
    WCHAR *bZoomFX;
    WCHAR *dwFlags;
    WCHAR *dwMinSecondarySampleRate;
    WCHAR *dwMaxSecondarySampleRate;
    WCHAR *dwPrimaryBuffers;
    WCHAR *dwMaxHwMixingAllBuffers;
    WCHAR *dwMaxHwMixingStaticBuffers;
    WCHAR *dwMaxHwMixingStreamingBuffers;
    WCHAR *dwFreeHwMixingAllBuffers;
    WCHAR *dwFreeHwMixingStaticBuffers;
    WCHAR *dwFreeHwMixingStreamingBuffers;
    WCHAR *dwMaxHw3DAllBuffers;
    WCHAR *dwMaxHw3DStaticBuffers;
    WCHAR *dwMaxHw3DStreamingBuffers;
    WCHAR *dwFreeHw3DAllBuffers;
    WCHAR *dwFreeHw3DStaticBuffers;
    WCHAR *dwFreeHw3DStreamingBuffers;
    WCHAR *dwTotalHwMemBytes;
    WCHAR *dwFreeHwMemBytes;
    WCHAR *dwMaxContigFreeHwMemBytes;
    WCHAR *dwUnlockTransferRateHwBuffers;
    WCHAR *dwPlayCpuOverheadSwBuffers;
    WCHAR *szNotesLocalized;
    WCHAR *szNotesEnglish;
    WCHAR *szRegHelpText;
    WCHAR *szTestResultLocalized;
    WCHAR *szTestResultEnglish;
} DxDiag_SoundDevice;

typedef struct {
    DxDiag_SystemInfo *systemInfo;
    DxDiag_DisplayDevice **displayDevices;
    int numDisplayDevices;
    DxDiag_SoundDevice **soundDevices;
    int numSoundDevices;
    DxDiag_SoundCaptureDevice **soundCaptureDevices;
    int numSoundCaptureDevices;
    DxDiag_DirectMusic *directMusic;
    DxDiag_DirectInput *directInput;
    DxDiag_DirectPlay *directPlay;
    DxDiag_SystemDevice **systemDevices;
    int numSystemDevices;
    DxDiag_DirectXFiles *directXFiles;
    DxDiag_DirectShowFilter **directShowFilters;
    int numDirectShowFilters;
    DxDiag_LogicalDisk **logicalDisks;
    int numLogicalDisks;
} DxDiag_Root;

/* Function declarations */
HRESULT DxDiagCOM_init(IDxDiagContainer ** dxRoot);
BOOL DxDiagCOM_ParseRoot(IDxDiagContainer * iContainer,
                       DxDiag_Root * container);

#endif
